package models

import (
	"fmt"
	"gorm.io/gorm"
	"gorm.io/gorm/clause"
)

// 工单单设计结构体
type FormDesign struct {
	Model        // 不用每次写ID 和 createAt了
	Name  string `json:"name" validate:"required,min=1,max=50" gorm:"uniqueIndex;type:varchar(100);comment:表单设计名称，支持使用通配符*进行模糊搜索" `
	//Creator User   `json:"Creator" `
	UserID uint

	FormConfig     string `json:"formConfig" gorm:"comment: 表单设计的大json"`
	Key            string `json:"key" gorm:"-"` //给前端表格
	CreateUserName string `json:"createUserName" gorm:"-"`
}

// 创建单表单设计
func (obj *FormDesign) CreateOneFormDesign() error {
	return DB.Create(obj).Error
}

// 获取所有的表单
func GetFormDesignAll() (objs []*FormDesign, err error) {
	err = DB.Find(&objs).Error
	return
}

// 获取单表单做分页处理
func GetFormDesignByIdsWithLimitOffset(ids []int, limit, offset int) (objs []*FormDesign, err error) {
	err = DB.Limit(limit).Offset(offset).Find(&objs, ids).Error
	return
}

// 填充前端需要的数据
func (obj *FormDesign) FillFrontAllData() {
	dbUser, _ := GetUserById(int(obj.UserID))
	if dbUser != nil {
		obj.CreateUserName = dbUser.RealName
	}
	obj.Key = fmt.Sprintf("%d", obj.ID)
}

// 根据ID查找单表单设计
func GetFormDesignById(id int) (*FormDesign, error) {
	var dbObj FormDesign
	err := DB.Where("id = ?", id).Find(&dbObj).Error
	if err != nil {
		if err == gorm.ErrRecordNotFound {
			return nil, fmt.Errorf("单表单设计不存在")
		}
		return nil, fmt.Errorf("单表单设计获取失败:%v", err)
	}
	return &dbObj, nil
}

// 根据ID删除单表单设计关联的所有信息  级联删除
func (obj *FormDesign) DeleteOneFormDesign() error {
	return DB.Select(clause.Associations).Unscoped().Delete(obj).Error
}

// 根据ID更新单表单设计
func (obj *FormDesign) UpdateOneFormDesign() error {
	return DB.Where("id = ?", obj.ID).Updates(obj).Error
}
